#ifndef RELOJ_H
#define	RELOJ_H

#include <vector>
#include "ITemporizable.h"
#include "Thread.h"

using namespace std;
using namespace TP::Threading;

namespace TP { namespace Juego { namespace Motorizacion { namespace
        Sincronizacion {

class Reloj : Thread {
public:

    Reloj(Ticks pUnidadTiempo);

    virtual ~Reloj();
    
    ITemporizable* addTemporizable (ITemporizable* pTemporizable);
    
    ITemporizable* removerTemporizable (ITemporizable* pTemporizable);
    
    Ticks correr ();
    
    Ticks getTiempo();
    
    virtual void Iniciar() throw (Excepcion&);

    virtual void Finalizar() throw (Excepcion&);

protected:
    virtual void tarea ();       
    void notificarAvanceTiempo ();
    
private:
    Ticks _unidadTiempo;
    Ticks _tiempoTranscurrido;
    vector<ITemporizable*> _temporizables;
    bool _corriendo;
};   
}}}}

#endif	/* RELOJ_H */